JQuery 之 event.target 与 event.currentTarget
这几天在使用jquery的过程中多次使用到event事件处理,过程中不免碰到了一些问题,今天就来总结一下下喽~~
场景一:
1 2 3
| jQuery(document) .on('dblclick','#tab tbody tr td:not([class="checkGroup"])',function(event){ })
|
监听特定td双击事件 event.target 则为首先触发双击事件的节点 $(this) 也能起到相同的作用
场景二:
1 2 3
| jQuery(document) .on('click','.list-collections',function(event){ })
|
监听list-collections’单击事件 event.currentTarget则保证选中的节点元素为list-collections 忽略其内部元素的事件。
场景一中遇到的问题:
使用$(this)或者$(event.target)获得的元素的属性或值,通过var 变量暂存时,出现数据多余的现象(之前触发事件的元素的属性和值一直存在),最后采用了无var的形式得以解决,可具体原因还未清楚,待考察!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| $(this).addClass('tdToUpdate'); //获得单元格的内容 // var val= $('#tab tbody tr td.tdToUpdate').text(); // var idStr = $('#tab tbody tr td.tdToUpdate').parent().find('td._id').text(); // var tdClasses =$('#tab tbody tr td.tdToUpdate').attr("class").split(" "); // var tdClass = tdClasses[0]; val = $('#tab tbody tr td.tdToUpdate').text(); tdClasses = $('#tab tbody tr td.tdToUpdate').attr("class").split(" "); tdClass = tdClasses[0]; //判断是否应该弹出层 if(tdClass!='_id' && tdClass!='updateTime' && tdClass!='createTime'){ //设置弹出div的位置 $("#runDiv").css("left",x); $("#runDiv").css("top",y); $("#runDiv").show(); $('#newText').focus().val(val).select(); } $('#runDiv button').click(function(){ var idStr = $('#tab tbody tr td.tdToUpdate').parent().find('td._id').text(); var saveBtnName = $('#runDiv button[name^="save"]').attr('name'); var btnName = $(this).attr('name'); if(btnName==saveBtnName){ var newStr = $('#newText').val(); var urlStr='/updateRow'; var contentStr='{"collectionName":"'+collectionName+'","idStr":"'+idStr +'","key":"'+tdClass+'","newVal":"'+newStr+'"}'; //判断当前列对应的id是否存在,存在则进行update操作,否则进行insert操作 if(idStr==null || idStr==""){ urlStr='/addRow'; contentStr='{"collectionName":"'+collectionName +'","key":"'+tdClass+'","newVal":"'+newStr+'"}'; } var contentJson=JSON.parse(contentStr); if(newStr!=val){//判断单元格的内容是否有变化 。。。。。。。。。 if(!("ops" in data)){//说明此时是通过update传回的值 if(data.ok==1 && data.n==1){ $('#tab tbody tr td.tdToUpdate').text(newStr);//页面展现新改变的内容 $('#tab tbody tr td.tdToUpdate').removeClass('tdToUpdate'); } }else{//通过insert传回的值 if(data.insertedCount!=0){ 。。。。。。。 $('#tab tbody tr td.tdToUpdate').parent().find('td._id').text(newId);//展现新增加数据的id $('#tab tbody tr td.tdToUpdate').removeClass('tdToUpdate'); } } } } });
delete (val); delete (tdClasses); delete (tdClass); $("#runDiv").hide();
|